iT邦幫忙

2025 iThome 鐵人賽

DAY 2
0
Software Development

30天收斂後端開發心法系列 第 2

30天收斂後端開發心法 - (2) Laravel 生命周期

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20250802/201777097g1oSum3YX.png

當談起 Laravel 不免俗的一定要先說他的請求生命週期,那就讓我們來仔細探究吧。

  1. 當user從網頁上按下buttom時

使用者透過瀏覽器發送 URL (Domain Name) 請求,該 URL 首先經由 DNS 解析為對應的 IP 位址,並透過指定的 port 將請求送至 Server(如 Nginx 或 Apache)。
Server 依據請求的檔案類型與路徑,判斷是否為 PHP 請求,若是,便將其轉交給 PHP-FPM 處理。
PHP-FPM 執行對應的 PHP 程式碼,此時請求才正式進入 Laravel 應用程式。

  1. 所有請求會透過 server 指向 public/index.php

在 Laravel 中,public/index.php 文件是所有請求的入口點。
當用戶的請求透過 Server 傳送到你的 Laravel 應用程式時,
Server 會將請求路由到 public/index.php 文件。
這個文件包含了一些必要的初始化代碼,例如加載 Composer
的自動加載器和 Laravel 應用程式本身的引導程序。

  1. 將 autoload.php 以及 bootstrap/app.php 實例化

當 Server 將請求路由到 public/index.php 文件時,這個文件會執行一些初始設置,並加載 Laravel 框架所需的設定、函式庫和其他相關文件並開始了整個應用程式的加載過程。
這段程式碼總共做了兩件事情,分別是設定主要目錄以及綁定實作的類別

  1. Http Kernel

app/Http/Kernel.php 是 Laravel 的「HTTP 核心進入點」,它的主要職責 註冊全域與路由專用的 Middleware:

  • $middleware:註冊「全域 Middleware」(每個 HTTP 請求都會跑)
  • $middlewareGroups:定義 middleware 群組(如 web、api)
  • $routeMiddleware:定義可以在 route 使用的別名 middleware
  1. Service Provider

Laravel 的中文文件說明:「服務提供者(Provider)是所有 Laravel 應用程式啟動的中心所在。你自己的應用程式,以及所有的 Laravel 核心服務,都是透過服務提供者啟動的。」

功能說明

  • 註冊服務/套件:
    註冊 Laravel 核心功能、第三方套件(像是 Passport、Sanctum、Debugbar 等)

  • 綁定服務容器(Service Container):
    利用 bind() / singleton() 將類別、介面注入容器,支援依賴注入

  • 事件監聽、Route、Middleware 等註冊:
    可以在 boot() 方法中註冊 route、view composer、事件監聽器等

  • 初始化應用邏輯:
    在 boot() 中執行自定初始化行為,例如共享變數、註冊自定驗證規則

  • 條件式註冊功能:
    根據環境條件來註冊不同功能,例如 dev-only 工具(debugbar)只在 local 開啟

  1. Route

Route 可以根據請求的 HTTP 方法與 URL 路徑,對應到特定的 Controller、Middleware 或 Route Group,進而處理該請求。

  1. Middleware

Middleware 是 Laravel 中處理請求前的中介層,可以進行如登入驗證、權限檢查、語系設定等初步過濾,決定是否讓請求繼續執行。

  1. Controller

當請求進入 Controller 後,通常會呼叫 Service 層的方法來處理商業邏輯,接著將處理結果整理成回應並回傳給用戶端,完成整個請求的生命週期。


上一篇
30天收斂後端開發心法 - (1) 簡介
下一篇
30天收斂後端開發心法 - (3) Route 與 Middleware
系列文
30天收斂後端開發心法30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言